package com.tzy.order.aop;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
 * 开发架构三大法宝: 反射、动态代理、AOP切面编程
 * Feign动态代理
 * 对事物进行统一操作使用AOP面向切面编程
 * aop可以防止代码侵入(指修改别人代码), 复制原来的代码写成一个新的方法
 * 最终增强: 类似异常处理里的finally,不管怎样都会执行
 */
public class FeignDemo implements InvocationHandler {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        RequestMapping annotation = method.getAnnotation(RequestMapping.class);
        RequestMethod[] methods = annotation.method();
        Class<?> declaringClass = method.getDeclaringClass();
        Class<?>[] interfaces = declaringClass.getInterfaces();
        FeignClient feignClient = interfaces[0].getAnnotation(FeignClient.class);
        String serviceId = feignClient.name();
        return null;
    }
}
